/* Copyright (c) 2001 - 2010 TOPP - www.openplans.org. All rights reserved.
 * This code is licensed under the GPL 2.0 license, availible at the root
 * application directory.
 */
package org.geoserver.jai;

import java.awt.Point;
import java.awt.image.Raster;
import java.awt.image.SampleModel;
import java.awt.image.WritableRaster;

import javax.media.jai.RasterFactory;
import javax.media.jai.TileFactory;
import javax.media.jai.TileRecycler;

/**
 * A pass-through recycling tile factory that does not cache tiles but simply creates new ones as asked
 * 
 * <p>
 * It is crucial to avoid using the standard one when we don't want caching as it might pop-up here and there otherwise.
 * 
 * @author Simone Giannecchini - GeoSolutions
 */
class PassThroughTileFactory implements TileFactory, TileRecycler {

    /**
     * Constructs a <code>RecyclingTileFactory</code>.
     */
    public PassThroughTileFactory() {
    }

    /**
     * Returns <code>false</code> since we don't cache.
     */
    public boolean canReclaimMemory() {
        return false;
    }

    /**
     * Returns <code>false</code> since we don't cache.
     */
    public boolean isMemoryCache() {
        return false;
    }

    /**
     * Always returns -1, does not do used memory accounting
     */
    public long getMemoryUsed() {
        return -1;
    }

    /**
     * Clean up the cache. Noop.
     */
    public void flush() {
    }

    /**
     * Builds a new tile, creating it from scratch.
     */
    public WritableRaster createTile(SampleModel sampleModel, Point location) {
        // sanity checks
        if (sampleModel == null) {
            throw new NullPointerException("sampleModel cannot be null");
        }
        if (location == null) {
            location = new Point(0, 0);
        }

        return RasterFactory.createWritableRaster(sampleModel, location);
    }

    /**
     * Recycles the given tile. Noop.
     */
    public void recycleTile(Raster tile) {
    }

}
